package com.sgb.goods.widget.pop;

import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.BitmapDrawable;
import android.util.AttributeSet;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;

import com.sgb.goods.utils.ScreenUtil;
import com.sgb.goods.utils.SmartUtils;
import com.swgk.core.dialog.BasePopWindow;

/**
 * 在线合同弹窗自定义
 * @author cyj
 * @param <D>
 */
public abstract class GoodsPopWindow<D> extends BasePopWindow<D> {

    public GoodsPopWindow(Context context) {
        super(context);
    }

    public GoodsPopWindow(Context context, int dir) {
        super(context, dir);
    }

    public GoodsPopWindow(Context context, AttributeSet attrs, int dir) {
        super(context, attrs, dir);
    }

    public GoodsPopWindow(Context context, AttributeSet attrs, int defStyleAttr, int dir) {
        super(context, attrs, defStyleAttr, dir);
    }

    public GoodsPopWindow(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes, int dir) {
        super(context, attrs, defStyleAttr, defStyleRes, dir);
    }

    /**
     * 显示弹窗。
     * @see this#showAsDropDown(View, int, int)
     */
    @Deprecated
    @Override
    public void showPopwindow(View view, int x, int y) {

    }

    /**
     * 适用于铺满整个布局的弹窗布局
     * 原理：满屏大小的弹窗布局在显示的时候，根据所传递的参照view重新计算弹窗高度，以实现多种不同的效果展现(类似固定位置
     * 的下拉列表弹窗或者独立的左上右下方向的弹窗)；
     *
     * 注意：弹窗布局的宽高应该为：
     * <p>
     *      android:layout_width="match_parent"
     *      android:layout_height="match_parent"
     * </p>
     * @param anchor    弹窗高度垂直方向参照view，可以理解是高度为参照view左上角位置开始到屏幕最底部为弹窗高度
     */
    public void showAsDropDown(View anchor) {
        if(isShowing()) {
            return;
        }
        setAlpha();
        super.showDownPopwindow(anchor, true);
    }

    /**
     * 显示弹窗
     * 弹窗高度算法：父容器的高度 - 参照view的y轴位置(参照view的起始点y点) = 弹窗高度值
     * @param anchor 参照view
     * @param xoff    x轴+-向偏移量
     * @param yoff    y轴+-向偏移量，特别注意y轴的参照view若是有真实高度，则需要设置此值
     */
    @Override
    public void showAsDropDown(View anchor, int xoff, int yoff) {
        if(isShowing()) {
            return;
        }
        // 重新计算弹窗高度
        int parentHeight = ((View) anchor.getParent()).getHeight();
        int h = parentHeight - anchor.getTop() - xoff - yoff;
        setHeight(h);
        super.showDownPopwindow(anchor, true);
    }

    private void setAlpha() {
        Window window = ((Activity) mContext).getWindow();
        WindowManager.LayoutParams lp = window.getAttributes();
        lp.alpha = 0.4f;
        window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
        window.setAttributes(lp);
        setTouchable(true);
        setFocusable(true);
        setBackgroundDrawable(new BitmapDrawable());
        setOutsideTouchable(true);
    }
}
